/**
 * 解释器模式：定义一种语言的文法表示，并创建一个解释器，该解释器能够解释该语言中的句子。通俗讲：设定一系列规则（具体为表达式），按规则进行执行。
 * 
 * 示例需求：
 * 创建一个接口 Expression。
 * 定义作为上下文中主要解释器的 TerminalExpression 类。
 * 定义其他的类 OrExpression、AndExpression 用于创建组合式表达式。
 * 根据表达式规则进行创建、使用。
 * 
 * 角色：
 * 抽象表达式：Expression
 * 终结表达式：TerminalExpression
 * 非终结表达式：OrExpression、AndExpression
 * 上下文：是个String 类型参数
 * 客户端：SimpleMain
 */
public class SimpleMain {
    
   //规则：Robert 和 John 是男性
   public static Expression getMaleExpression(){
      Expression robert = new TerminalExpression("Robert");
      Expression john = new TerminalExpression("John");
      return new OrExpression(robert, john);    
   }
 
   //规则：Julie 是一个已婚的女性
   public static Expression getMarriedWomanExpression(){
      Expression julie = new TerminalExpression("Julie");
      Expression married = new TerminalExpression("Married");
      return new AndExpression(julie, married);    
   }
 
    public static void main(String[] args) {
      Expression isMale = getMaleExpression();
      Expression isMarriedWoman = getMarriedWomanExpression();
 
      System.out.println("John is male? " + isMale.interpret("John"));
      System.out.println("Julie is a married women? " + isMarriedWoman.interpret("Married Julie"));
   }
}
